package cn.wangdh.domain.strategy.model.entity;

import cn.wangdh.domain.strategy.model.vo.RuleLogicCheckTypeVO;
import lombok.*;

/**
 * @author Fuzhengwei bugstack.cn @小傅哥
 * @description 过滤完规则后的规则动作实体
 * @create 2024-01-06 09:47
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class RuleActionEntity<T extends RuleActionEntity.RaffleEntity> {

    private String code = RuleLogicCheckTypeVO.ALLOW.getCode();
    private String info = RuleLogicCheckTypeVO.ALLOW.getInfo();
    private String ruleModel;
    private T data;

    //这里为什么类中还要定义类，为了安全，保证子类不被其他类给调用
    static public class RaffleEntity {

    }

    // 抽奖之前
    //callSuper = true参数的作用是告诉Lombok在生成equals和hashCode方法时，
    // 应该包括父类的字段（属性）。默认情况下，callSuper的值是false，意味着生成的equals和hashCode方法只会考虑当前类中的字段，而不会考虑从父类继承的字段。
    @EqualsAndHashCode(callSuper = true)
    @Data
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    static public class RaffleBeforeEntity extends RaffleEntity {
        /**
         * 策略ID
         */
        private Long strategyId;

        /**
         * 权重值Key；用于抽奖时可以选择权重抽奖。
         */
        private String ruleWeightValueKey;

        /**
         * 奖品ID；
         */
        private Integer awardId;
    }

    // 抽奖之中
    static public class RaffleCenterEntity extends RaffleEntity {

    }

    // 抽奖之后
    static public class RaffleAfterEntity extends RaffleEntity {

    }

}

